package com.fattyCorps.common.enums.battle.triggerCondition;

/**
 * 行为基础触发条件
 */
public enum EBehaviorCondition {
    // 单局开始前
    BeforeBattleBegin,
    // 回合开始前
    BeforeRoundBegin,
    // 回合结束后
    AfterRoundEnd,

    // 英雄回合行动前(无论是否能出手均会触发)
    BeforeHeroActive,
    // 英雄回合行动时，开始激活后触发
//    HeroActive,
    // 英雄回合行动后(无论是否能出手均会触发)
    AfterHeroActive,

    // 自己回合行动前
    BeforeSelfActive(true),
    // 自己回合行动时，开始激活后触发
    SelfActive(true),
    // 自己回合行动后
    AfterSelfActive(true),

    // 英雄普通攻击|技能攻击前
    BeforeHeroAtt,
    // 英雄普通攻击|技能攻击 攻击/特效关键帧触发
    HeroAtt,
    // 英雄普通攻击|技能攻击后
    AfterHeroAtt,

    // 自己普通攻击|技能攻击前
    BeforeSelfAtt(true),
    // 自己普通攻击|技能攻击 攻击/特效关键帧触发
    SelfAtt(true),
    // 自己普通攻击|技能攻击后
    AfterSelfAtt(true),
    
    // 英雄普通攻击前
    BeforeHeroNorAtt,
    // 英雄普通攻击 攻击/特效关键帧触发
    HeroNorAtt,
    // 英雄普通攻击后
    AfterHeroNorAtt,

    // 自己普通攻击前
    BeforeSelfNorAtt(true),
    // 自己普通攻击 攻击/特效关键帧触发
    SelfNorAtt(true),
    // 自己普通攻击后
    AfterSelfNorAtt(true),
    
    // 英雄技能攻击前
    BeforeHeroSkillAtt,
    // 英雄技能攻击时 攻击/特效关键帧触发
    HeroSkillAtt,
    // 英雄技能攻击后
    AfterHeroSkillAtt,

    // 自己技能攻击前
    BeforeSelfSkillAtt(true),
    // 自己技能攻击时 攻击/特效关键帧触发
    SelfSkillAtt(true),
    // 自己技能攻击后
    AfterSelfSkillAtt(true),
    
    // 英雄死亡后
    HeroDead,
    // 敌方单位死亡后
    EnemyDead,
    // 我方单位死亡(除自己)后
    PartnerExceptSelfDead,
    // 自己死亡后
    SelfDead(true),
    // 自己击杀敌方单位后
    AfterSelfKillEnemy(true),

    // 我方暴击后
    AfterPartnerCritical,
    // 敌方暴击后
    AfterEnemyCritical,
    // 自己暴击后
    AfterSelfCritical(true),

    // 自己被攻击前
    BeforeSelfUnderAtt(true),
    // 自己被攻击后
    AfterSelfUnderAtt(true),

    // 自己被暴击后
    AfterSelfBeCritical(true),

    // 自己获得某buff后
    AfterSelfAddBuff(true),
    // 自己（仅触发一次）生命低于xx%后
    AfterSelfHpBelow(true),

    // 自己格挡后
    AfterSelfParry(true),
    // 目标格挡后
    AfterEnemyParry,

    // 自己抵抗后
    AfterSelfResist(true),
    // 目标抵抗后
    AfterEnemyResist,

    // 自己造成伤害或回复时
    SelfCalcDamage(true),
    // 属性计算时
    CalcProp,

    // 触发时
    Triggered;

    private boolean self = false;

    public boolean isSelf() {
        return self;
    }

    EBehaviorCondition() {

    }

    EBehaviorCondition(boolean self) {
        this.self = self;
    }
}
